package com.huey.utils.thread.countDownLatch;

import com.huey.utils.thread.ThreadUtils;

import java.util.concurrent.CountDownLatch;

/**
 * @author xubo
 * @date 2022/10/6 16:47
 */
public class Test02 {
    public static void main(String[] args) {
        //保存数据
        handleLogin();
        System.out.println(1111);
    }


    /**
     * 模拟线程池分批处理任务，主线程需要等待子任务线程执行完，结果汇总之后，主线程继续往下执行
     */
    public static void handleLogin() {
        // 使用线程池中线程分批处理业务逻辑，并行处理任务提高终端响应速度
        CountDownLatch latch = new CountDownLatch(10);
        for (int i = 0; i < 10; i++) {
            int finalI = i;
            ThreadUtils.execute(() -> {
                try {
                    System.out.println("业务逻辑处理，参数："+ finalI);
                    // 业务逻辑正常处理......
                } catch (Exception e) {
                    System.out.println("调用下游系统出现错误，异常逻辑处理......");
                } finally {
                    // 业务逻辑处理完毕，计数器减一【当前线程处理任务完毕，线程释放进入线程池，等待处理下一个任务】
                    latch.countDown();
                }
            });
        }
        // 主线程需要等待子任务线程执行完，结果汇总之后，主线程继续往下执行
        try {
            latch.await();
        } catch (Exception e) {
            System.out.println("等待超时"+e);
            throw new RuntimeException("系统处理超时，请稍后再试");
        }
        System.out.println("11111111111");
    }
}
